home *** CD-ROM | disk | FTP | other *** search
/ Hackers Magazine 57 / CdHackersMagazineNr57.iso / Software / Programming / nsis-2.46-setup.exe / Contrib / Modern UI 2 / Pages / StartMenu.nsh < prev    next >
Encoding:
Text File  |  2008-12-20  |  7.8 KB  |  236 lines

  1. /*
  2.  
  3. NSIS Modern User Interface
  4. Start Menu folder page
  5.  
  6. */
  7.  
  8. ;--------------------------------
  9. ;Page interface settings and variables
  10.  
  11. !macro MUI_STARTMENUPAGE_INTERFACE
  12.  
  13.   !ifndef MUI_STARTMENUPAGE_INTERFACE
  14.     !define MUI_STARTMENUPAGE_INTERFACE
  15.     Var mui.StartMenuPage
  16.     Var mui.StartMenuPage.Location
  17.     Var mui.StartMenuPage.FolderList
  18.  
  19.     Var mui.StartMenuPage.Temp
  20.   !endif
  21.  
  22.   !ifdef MUI_STARTMENUPAGE_REGISTRY_ROOT & MUI_STARTMENUPAGE_REGISTRY_KEY & MUI_STARTMENUPAGE_REGISTRY_VALUENAME
  23.     !ifndef MUI_STARTMENUPAGE_REGISTRY_VARIABLES
  24.       !define MUI_STARTMENUPAGE_REGISTRY_VARIABLES
  25.         Var mui.StartMenuPage.RegistryLocation
  26.     !endif
  27.   !endif
  28.  
  29. !macroend
  30.  
  31.  
  32. ;--------------------------------
  33. ;Page declaration
  34.  
  35. !macro MUI_PAGEDECLARATION_STARTMENU ID VAR
  36.  
  37.   !insertmacro MUI_SET MUI_${MUI_PAGE_UNINSTALLER_PREFIX}STARTMENUPAGE ""
  38.   !insertmacro MUI_STARTMENUPAGE_INTERFACE  
  39.  
  40.   !insertmacro MUI_DEFAULT MUI_STARTMENUPAGE_DEFAULTFOLDER "$(^Name)"
  41.   !insertmacro MUI_DEFAULT MUI_STARTMENUPAGE_TEXT_TOP "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}INNERTEXT_STARTMENU_TOP)"
  42.   !insertmacro MUI_DEFAULT MUI_STARTMENUPAGE_TEXT_CHECKBOX "$(MUI_${MUI_PAGE_UNINSTALLER_PREFIX}INNERTEXT_STARTMENU_CHECKBOX)"
  43.  
  44.   !define MUI_STARTMENUPAGE_VARIABLE "${VAR}"
  45.   !define "MUI_STARTMENUPAGE_${ID}_VARIABLE" "${MUI_STARTMENUPAGE_VARIABLE}"
  46.   !define "MUI_STARTMENUPAGE_${ID}_DEFAULTFOLDER" "${MUI_STARTMENUPAGE_DEFAULTFOLDER}"
  47.   !ifdef MUI_STARTMENUPAGE_REGISTRY_ROOT
  48.     !define "MUI_STARTMENUPAGE_${ID}_REGISTRY_ROOT" "${MUI_STARTMENUPAGE_REGISTRY_ROOT}"
  49.   !endif
  50.   !ifdef MUI_STARTMENUPAGE_REGISTRY_KEY
  51.     !define "MUI_STARTMENUPAGE_${ID}_REGISTRY_KEY" "${MUI_STARTMENUPAGE_REGISTRY_KEY}"
  52.   !endif
  53.   !ifdef MUI_STARTMENUPAGE_REGISTRY_VALUENAME
  54.     !define "MUI_STARTMENUPAGE_${ID}_REGISTRY_VALUENAME" "${MUI_STARTMENUPAGE_REGISTRY_VALUENAME}"
  55.   !endif
  56.  
  57.   PageEx ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}custom
  58.  
  59.     PageCallbacks ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.StartmenuPre_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.StartmenuLeave_${MUI_UNIQUEID}
  60.  
  61.     Caption " "
  62.  
  63.   PageExEnd
  64.  
  65.   !insertmacro MUI_FUNCTION_STARTMENUPAGE ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.StartmenuPre_${MUI_UNIQUEID} ${MUI_PAGE_UNINSTALLER_FUNCPREFIX}mui.StartmenuLeave_${MUI_UNIQUEID}
  66.  
  67.   !undef MUI_STARTMENUPAGE_VARIABLE
  68.   !undef MUI_STARTMENUPAGE_TEXT_TOP
  69.   !undef MUI_STARTMENUPAGE_TEXT_CHECKBOX
  70.   !undef MUI_STARTMENUPAGE_DEFAULTFOLDER
  71.   !insertmacro MUI_UNSET MUI_STARTMENUPAGE_NODISABLE
  72.   !insertmacro MUI_UNSET MUI_STARTMENUPAGE_REGISTRY_ROOT
  73.   !insertmacro MUI_UNSET MUI_STARTMENUPAGE_REGISTRY_KEY
  74.   !insertmacro MUI_UNSET MUI_STARTMENUPAGE_REGISTRY_VALUENAME
  75.  
  76. !macroend
  77.  
  78. !macro MUI_PAGE_STARTMENU ID VAR
  79.  
  80.   !verbose push
  81.   !verbose ${MUI_VERBOSE}
  82.  
  83.   !insertmacro MUI_PAGE_INIT
  84.   !insertmacro MUI_PAGEDECLARATION_STARTMENU "${ID}" "${VAR}"
  85.  
  86.   !verbose pop
  87.  
  88. !macroend
  89.  
  90. ;--------------------------------
  91. ;Page functions
  92.  
  93. !macro MUI_FUNCTION_STARTMENUPAGE PRE LEAVE
  94.  
  95.   Function "${PRE}"
  96.  
  97.     !insertmacro MUI_PAGE_FUNCTION_CUSTOM PRE
  98.  
  99.     !ifdef MUI_STARTMENUPAGE_REGISTRY_ROOT & MUI_STARTMENUPAGE_REGISTRY_KEY & MUI_STARTMENUPAGE_REGISTRY_VALUENAME
  100.       
  101.       ;Get Start Menu location from registry
  102.  
  103.       ${if} "${MUI_STARTMENUPAGE_VARIABLE}" == ""
  104.  
  105.         ReadRegStr $mui.StartMenuPage.RegistryLocation  "${MUI_STARTMENUPAGE_REGISTRY_ROOT}" "${MUI_STARTMENUPAGE_REGISTRY_KEY}" "${MUI_STARTMENUPAGE_REGISTRY_VALUENAME}"
  106.         ${if} $mui.StartMenuPage.RegistryLocation != ""
  107.           StrCpy "${MUI_STARTMENUPAGE_VARIABLE}" $mui.StartMenuPage.RegistryLocation
  108.         ${endif}
  109.  
  110.         ClearErrors
  111.  
  112.       ${endif}
  113.  
  114.     !endif
  115.  
  116.     !insertmacro MUI_HEADER_TEXT_PAGE $(MUI_TEXT_STARTMENU_TITLE) $(MUI_TEXT_STARTMENU_SUBTITLE)
  117.  
  118.     ${if} $(^RTL) == "0"
  119.        !ifndef MUI_STARTMENUPAGE_NODISABLE
  120.         StartMenu::Init /noicon /autoadd /text "${MUI_STARTMENUPAGE_TEXT_TOP}" /lastused "${MUI_STARTMENUPAGE_VARIABLE}" /checknoshortcuts "${MUI_STARTMENUPAGE_TEXT_CHECKBOX}" "${MUI_STARTMENUPAGE_DEFAULTFOLDER}"
  121.       !else
  122.         StartMenu::Init /noicon /autoadd /text "${MUI_STARTMENUPAGE_TEXT_TOP}" /lastused "${MUI_STARTMENUPAGE_VARIABLE}" "${MUI_STARTMENUPAGE_DEFAULTFOLDER}"
  123.       !endif
  124.     ${else}
  125.       !ifndef MUI_STARTMENUPAGE_NODISABLE
  126.         StartMenu::Init /rtl /noicon /autoadd /text "${MUI_STARTMENUPAGE_TEXT_TOP}" /lastused "${MUI_STARTMENUPAGE_VARIABLE}" /checknoshortcuts "${MUI_STARTMENUPAGE_TEXT_CHECKBOX}" "${MUI_STARTMENUPAGE_DEFAULTFOLDER}"
  127.       !else
  128.         StartMenu::Init /rtl /noicon /autoadd /text "${MUI_STARTMENUPAGE_TEXT_TOP}" /lastused "${MUI_STARTMENUPAGE_VARIABLE}" "${MUI_STARTMENUPAGE_DEFAULTFOLDER}"
  129.       !endif
  130.     ${endif}
  131.  
  132.     Pop $mui.StartMenuPage
  133.  
  134.     ;Get control handles
  135.     GetDlgItem $mui.StartMenuPage.Location $mui.StartMenuPage 1002
  136.     GetDlgItem $mui.StartMenuPage.FolderList $mui.StartMenuPage 1004
  137.  
  138.     !ifdef MUI_STARTMENUPAGE_BGCOLOR
  139.       SetCtlColors $mui.StartMenuPage.Location "" "${MUI_STARTMENUPAGE_BGCOLOR}"
  140.       SetCtlColors $mui.StartMenuMenu.FolderList "" "${MUI_STARTMENUPAGE_BGCOLOR}"
  141.     !endif
  142.  
  143.     !insertmacro MUI_PAGE_FUNCTION_CUSTOM SHOW
  144.  
  145.     StartMenu::Show
  146.  
  147.     Pop $mui.StartMenuPage.Temp
  148.     ${if} $mui.StartMenuPage.Temp ==  "success"
  149.       Pop "${MUI_STARTMENUPAGE_VARIABLE}"
  150.     ${endif}
  151.  
  152.   FunctionEnd
  153.  
  154.   Function "${LEAVE}"
  155.  
  156.     !insertmacro MUI_PAGE_FUNCTION_CUSTOM LEAVE
  157.  
  158.   FunctionEnd
  159.  
  160. !macroend
  161.  
  162.  
  163. ;--------------------------------
  164. ;Script macros to get Start Menu folder
  165.  
  166. !macro MUI_STARTMENU_GETFOLDER ID VAR
  167.  
  168.   !verbose push
  169.   !verbose ${MUI_VERBOSE}
  170.  
  171.   ;Get Start Menu folder from registry
  172.   ;Can be called from the script in the uninstaller
  173.  
  174.   !ifdef MUI_STARTMENUPAGE_${ID}_REGISTRY_ROOT & MUI_STARTMENUPAGE_${ID}_REGISTRY_KEY & MUI_STARTMENUPAGE_${ID}_REGISTRY_VALUENAME
  175.  
  176.     ReadRegStr $mui.StartMenuPage.RegistryLocation "${MUI_STARTMENUPAGE_${ID}_REGISTRY_ROOT}" "${MUI_STARTMENUPAGE_${ID}_REGISTRY_KEY}" "${MUI_STARTMENUPAGE_${ID}_REGISTRY_VALUENAME}"
  177.     
  178.     ${if} $mui.StartMenuPage.RegistryLocation != ""
  179.       StrCpy "${VAR}" $mui.StartMenuPage.RegistryLocation
  180.     ${else}
  181.       StrCpy "${VAR}" "${MUI_STARTMENUPAGE_${ID}_DEFAULTFOLDER}"
  182.     ${endif}
  183.  
  184.   !else
  185.  
  186.     StrCpy "${VAR}" "${MUI_STARTMENUPAGE_${ID}_DEFAULTFOLDER}"
  187.  
  188.   !endif
  189.    
  190.   !verbose pop   
  191.  
  192. !macroend
  193.  
  194. !macro MUI_STARTMENU_WRITE_BEGIN ID
  195.  
  196.   ;The code in the script to write the shortcuts should be put between the
  197.   ;MUI_STARTMENU_WRITE_BEGIN and MUI_STARTMENU_WRITE_END macros
  198.  
  199.   !verbose push
  200.   !verbose ${MUI_VERBOSE}
  201.  
  202.   !define MUI_STARTMENUPAGE_CURRENT_ID "${ID}"
  203.  
  204.   StrCpy $mui.StartMenuPage.Temp "${MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_VARIABLE}" 1
  205.   
  206.   ;If the folder start with >, the user has chosen not to create a shortcut
  207.   ${if} $mui.StartMenuPage.Temp != ">"
  208.  
  209.     ${if} "${MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_VARIABLE}" == ""
  210.       ;Get folder from registry if the variable doesn't contain anything
  211.       !insertmacro MUI_STARTMENU_GETFOLDER "${MUI_STARTMENUPAGE_CURRENT_ID}" "${MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_VARIABLE}"
  212.     ${endif}
  213.  
  214.   !verbose pop
  215.  
  216. !macroend
  217.  
  218. !macro MUI_STARTMENU_WRITE_END
  219.  
  220.   !verbose push
  221.   !verbose ${MUI_VERBOSE}
  222.  
  223.     !ifdef MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_REGISTRY_ROOT & MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_REGISTRY_KEY & MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_REGISTRY_VALUENAME
  224.       ;Write folder to registry
  225.       WriteRegStr "${MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_REGISTRY_ROOT}" "${MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_REGISTRY_KEY}" "${MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_REGISTRY_VALUENAME}" "${MUI_STARTMENUPAGE_${MUI_STARTMENUPAGE_CURRENT_ID}_VARIABLE}"
  226.     !endif
  227.  
  228.   ${endif}
  229.  
  230.   !undef MUI_STARTMENUPAGE_CURRENT_ID
  231.  
  232.   !verbose pop
  233.  
  234. !macroend
  235.  
  236.